/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Interfaz.Alumnos;

import Controladores.ControladorCamposTexto;
import Controladores.GestorAlumnos;
import Modelo.Alumno;
import java.awt.Color;
import java.util.ArrayList;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author marco.chan
 */
public class InterfazInfoAlumno extends javax.swing.JDialog {

    /**
     * Crea una nueva ventana InterfazInfoALumno
     * @param _padre
     * @param modal
     */
    public InterfazInfoAlumno(java.awt.Frame _padre, boolean modal) {
        super(_padre, "Busqueda Alumnos", modal);
        initComponents();
        establecerFondoYPosicion(_padre);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPopupOpcionesAlumno = new javax.swing.JPopupMenu();
        jMenuItemModificar = new javax.swing.JMenuItem();
        jMenuItemHistorialPrestamos = new javax.swing.JMenuItem();
        jTabbedPaneAlumnosInfo = new javax.swing.JTabbedPane();
        jPanelAlumnosInfo = new javax.swing.JPanel();
        jScrollPaneTablaALumnos = new javax.swing.JScrollPane();
        jTableAlumnosInfo = new javax.swing.JTable();
        jTextFieldBuscarAlumno = new javax.swing.JTextField();
        jPanel1 = new javax.swing.JPanel();

        jMenuItemModificar.setText("Modificar");
        jPopupOpcionesAlumno.add(jMenuItemModificar);

        jMenuItemHistorialPrestamos.setText("Comentarios");
        jMenuItemHistorialPrestamos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemHistorialPrestamosActionPerformed(evt);
            }
        });
        jPopupOpcionesAlumno.add(jMenuItemHistorialPrestamos);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jPanelAlumnosInfo.setOpaque(false);

        jTableAlumnosInfo.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Matricula", "Nombre", "Telefono", "Direccion", "Correo", "Licenciatura"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jTableAlumnosInfo.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTableAlumnosInfoMouseClicked(evt);
            }
        });
        jScrollPaneTablaALumnos.setViewportView(jTableAlumnosInfo);
        if (jTableAlumnosInfo.getColumnModel().getColumnCount() > 0) {
            jTableAlumnosInfo.getColumnModel().getColumn(0).setMinWidth(90);
            jTableAlumnosInfo.getColumnModel().getColumn(0).setPreferredWidth(90);
            jTableAlumnosInfo.getColumnModel().getColumn(0).setMaxWidth(90);
            jTableAlumnosInfo.getColumnModel().getColumn(2).setMinWidth(90);
            jTableAlumnosInfo.getColumnModel().getColumn(2).setPreferredWidth(90);
            jTableAlumnosInfo.getColumnModel().getColumn(2).setMaxWidth(90);
        }

        jTextFieldBuscarAlumno.setForeground(new java.awt.Color(153, 153, 153));
        jTextFieldBuscarAlumno.setText("Buscar...");
        jTextFieldBuscarAlumno.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldBuscarAlumnoFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldBuscarAlumnoFocusLost(evt);
            }
        });
        jTextFieldBuscarAlumno.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextFieldBuscarAlumnoKeyPressed(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTextFieldBuscarAlumnoKeyTyped(evt);
            }
        });

        javax.swing.GroupLayout jPanelAlumnosInfoLayout = new javax.swing.GroupLayout(jPanelAlumnosInfo);
        jPanelAlumnosInfo.setLayout(jPanelAlumnosInfoLayout);
        jPanelAlumnosInfoLayout.setHorizontalGroup(
            jPanelAlumnosInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelAlumnosInfoLayout.createSequentialGroup()
                .addGap(0, 715, Short.MAX_VALUE)
                .addComponent(jTextFieldBuscarAlumno, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(jPanelAlumnosInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jScrollPaneTablaALumnos, javax.swing.GroupLayout.DEFAULT_SIZE, 815, Short.MAX_VALUE))
        );
        jPanelAlumnosInfoLayout.setVerticalGroup(
            jPanelAlumnosInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelAlumnosInfoLayout.createSequentialGroup()
                .addComponent(jTextFieldBuscarAlumno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 262, Short.MAX_VALUE))
            .addGroup(jPanelAlumnosInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelAlumnosInfoLayout.createSequentialGroup()
                    .addGap(0, 27, Short.MAX_VALUE)
                    .addComponent(jScrollPaneTablaALumnos, javax.swing.GroupLayout.PREFERRED_SIZE, 255, javax.swing.GroupLayout.PREFERRED_SIZE)))
        );

        jTabbedPaneAlumnosInfo.addTab("Busqueda Alumnos", jPanelAlumnosInfo);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 815, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 282, Short.MAX_VALUE)
        );

        jTabbedPaneAlumnosInfo.addTab("Historial Prestamos", jPanel1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jTabbedPaneAlumnosInfo)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jTabbedPaneAlumnosInfo, javax.swing.GroupLayout.Alignment.TRAILING)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jTextFieldBuscarAlumnoKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldBuscarAlumnoKeyTyped
        ControladorCamposTexto controladorCampos = new ControladorCamposTexto();
        String matricula = obtenerMatricula();
        int limite = 8;
        if(controladorCampos.formatoNumericoLimitado(evt, matricula, limite)){
            if(matricula.equals("")){
                matricula = Character.toString(evt.getKeyChar());
            }else{
                matricula = matricula.concat(Character.toString(evt.getKeyChar()));
            }
        }
        ArrayList<Alumno> listaAlumnos = buscarAlumnos(matricula);
        limpiarTabla();
        imprimirAlumnosEncontrados(listaAlumnos);
    }//GEN-LAST:event_jTextFieldBuscarAlumnoKeyTyped

    private void jTextFieldBuscarAlumnoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldBuscarAlumnoKeyPressed
        
    }//GEN-LAST:event_jTextFieldBuscarAlumnoKeyPressed

    private void jTextFieldBuscarAlumnoFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldBuscarAlumnoFocusGained
        String texto = obtenerMatricula();
        if(texto.equals("Buscar...")){
            Color color = Color.BLACK;
            establecerTextoYColor("", color);
        }
    }//GEN-LAST:event_jTextFieldBuscarAlumnoFocusGained

    private void jTextFieldBuscarAlumnoFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldBuscarAlumnoFocusLost
        String texto = obtenerMatricula();
        if(texto.equals("")){
            Color color = new Color(153, 153, 153); //Gris
            establecerTextoYColor("Buscar...", color);
        }
    }//GEN-LAST:event_jTextFieldBuscarAlumnoFocusLost

    private void jTableAlumnosInfoMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTableAlumnosInfoMouseClicked
        int filaSeleccionada = jTableAlumnosInfo.rowAtPoint(evt.getPoint());
        if (filaSeleccionada >= 0 && filaSeleccionada < jTableAlumnosInfo.getRowCount()){
            jTableAlumnosInfo.setRowSelectionInterval(filaSeleccionada, filaSeleccionada);
            if(SwingUtilities.isRightMouseButton(evt) ){
                jPopupOpcionesAlumno.show(jTableAlumnosInfo, evt.getX(), evt.getY());
            }
        }else{
            jTableAlumnosInfo.clearSelection();
        }
    }//GEN-LAST:event_jTableAlumnosInfoMouseClicked

    private void jMenuItemHistorialPrestamosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemHistorialPrestamosActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_jMenuItemHistorialPrestamosActionPerformed

    /**
     * solicita la busqueda de los alumnos que coincidan con la matricula ingresada
     * @param _matricula
     * @return Devuelve la lista de alumnos encontrados
     */
    private ArrayList<Alumno> buscarAlumnos(String _matricula){
        GestorAlumnos administradorAlumnos = new GestorAlumnos();
        return administradorAlumnos.buscarListaAlumnos(_matricula);
    }
    
    /**
     * verifica si la tabla esta vacia
     * @return Devuelve verdadero si y solo si la tabla esta vacia
     */
    private boolean esTablaVacia(){
        final int numFilas = obtenerNumFilas();
        final int NO_FILAS = -1;
        final boolean tablaVacia = true;
        
        if(numFilas == NO_FILAS){
            return tablaVacia;
        }else{
            return !tablaVacia;
        }
    }
    
    /**
     * obtiene el modelo actual de la tabla de alumnos
     * @return Devuelve el modelo de la tabla de alumnos
     */
    private DefaultTableModel obtenerModeloTabla(){
        return (DefaultTableModel) jTableAlumnosInfo.getModel();
    }
    
    /**
     * obtiene el numero de filas de la tabla alumnos
     * @return Devuelve el numero de fial de la tabla de alumnos
     */
    private int obtenerNumFilas(){
        int numFilas = -1;
        final int TABLA_VACIA = 0;
        if(jTableAlumnosInfo.getRowCount() != TABLA_VACIA){
            numFilas = jTableAlumnosInfo.getRowCount();
            return numFilas;
        }
        
        return numFilas;
    }
    
    /**
     * obtiene la matricula escrita en el campo de busqueda
     * @return Devuelve la matricula
     */
    private String obtenerMatricula(){
        return jTextFieldBuscarAlumno.getText();
    }
    
    /**
     * establece el fondo de color blanco
     */
    private void establecerFondoYPosicion(java.awt.Frame _pantallaPadre){
        //cambia el color dle jframe
        this.getContentPane().setBackground(Color.white);
        this.setLocationRelativeTo(_pantallaPadre);
        
        //cambia el color de la tabla
        jScrollPaneTablaALumnos.getViewport().setOpaque(false);
    }
    
    /**
     * establece el nuevo modelo de la tabla de alumnos
     * @param _ModeloDeTabla 
     */
    private void establecerNuevoModeloTabla(DefaultTableModel _ModeloDeTabla){
        jTableAlumnosInfo.setModel(_ModeloDeTabla);
    }
    
    /**
     * establece la matricula o texto ingresado en el campo de busqueda
     */
    private void establecerTextoYColor(String _matricula, Color _color){
        jTextFieldBuscarAlumno.setText(_matricula);
        jTextFieldBuscarAlumno.setForeground(_color);
    }  
    
    /**
     * imprime los datos de los alumnos encontrados
     * @param _listaAlumnosEncontrados 
     */
    private void imprimirAlumnosEncontrados(ArrayList<Alumno> _listaAlumnosEncontrados){
        final int totalAlumnosEncontrados = _listaAlumnosEncontrados.size();
        final int NUMERO_DE_COLUMAS = 6;
        String[] NuevaFila = new String[NUMERO_DE_COLUMAS];
        
        DefaultTableModel ModeloDeTabla;
        ModeloDeTabla = obtenerModeloTabla();
        
        for(int contadorAlumnos = 0; contadorAlumnos < totalAlumnosEncontrados
                ;contadorAlumnos++){
            
            Alumno alumno = _listaAlumnosEncontrados.get(contadorAlumnos);
            
            String matricula = alumno.obtenerMatricula();
            NuevaFila[COLUMNA_MATRICULA] = matricula;

            String nombre = alumno.obtenerNombre();
            NuevaFila[COLUMNA_NOMBRE] = nombre;
            
            String telefono = alumno.obtenerTelefono();
            NuevaFila[COLUMNA_TELEFONO] = telefono;
            
            String direccion = alumno.obtenerDireccion();
            NuevaFila[COLUMNA_DIRECCION] = direccion;
                
            String correo = alumno.obtenerCorreo();
            NuevaFila[COLUMNA_CORREO] = correo;
            
            String licenciatura = alumno.obtenerLicenciatura();
            NuevaFila[COLUMNA_LICENCIATURA] = licenciatura;
            
            ModeloDeTabla.addRow(NuevaFila);
        }
        
        establecerNuevoModeloTabla(ModeloDeTabla);
    }
    
    /**
     * limpia la tabla de alumnos
     */
    private void limpiarTabla(){
        if(!esTablaVacia()){
            int numFilas = obtenerNumFilas();
            final int NO_FILAS = 0;
            DefaultTableModel modeloTabla = obtenerModeloTabla();
            while(numFilas > NO_FILAS){
                final int PRIMERA_FILA = 0;
                modeloTabla.removeRow(PRIMERA_FILA);
                numFilas--;
            }
            
            establecerNuevoModeloTabla(modeloTabla);
        }
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuItem jMenuItemHistorialPrestamos;
    private javax.swing.JMenuItem jMenuItemModificar;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanelAlumnosInfo;
    private javax.swing.JPopupMenu jPopupOpcionesAlumno;
    private javax.swing.JScrollPane jScrollPaneTablaALumnos;
    private javax.swing.JTabbedPane jTabbedPaneAlumnosInfo;
    private javax.swing.JTable jTableAlumnosInfo;
    private javax.swing.JTextField jTextFieldBuscarAlumno;
    // End of variables declaration//GEN-END:variables
}
